#Archivos y directorios fijos del programa.
carpetas=("GRUPO" "ARRIDIR" "RECHDIR" "BINDIR" "MAEDIR" "REPODIR" "LOGDIR")
archmae=("prod.mae" "sucu.mae" "cli.mae")
archcom=("DetectarU.sh" "GrabarParqueU.sh" "ListarU.pl" "MoverU.sh" "LoguearU.sh" "IniciarU.sh")

#Variables utilizas para validar el seteo de las mismas.
otrasvarComprobacion=($PATH $CONFDIR $CONFARCH)
carpetasComprobacion=($GRUPO $ARRIDIR $RECHDIR $BINDIR $MAEDIR $REPODIR $LOGDIR)
archmaeComprobacion=($prodmae $sucumae $climae)
archcomComprobacion=($detectarU $grabarParqueU $listarU $moverU $loguearU $iniciarU)


#Variable donde esta ubicado el comando.
GRUPO=`pwd`

#Obtengo el path del directorio del grupo.
GRUPO=${GRUPO%/*}

#Variables de configuracion.
CONFDIR=$GRUPO/confdir
CONFARCH=$CONFDIR/InstalarU.conf

#Estados de error. 
#(0:Sin errores, 1:Dir o arch inexistentes)
#Incializa con estado sin error.
ERROR=0


#######################################################
## Impresion Pantalla Estado Inicializacion Correcto ##
#######################################################

function imprimirEstadoInicializado() {
  
  #Encabezado.
  echo "TP SO7508 1mer cuatrimestre 2012. Tema U Copyright © Grupo 02"
  echo

  #Directorio Configuracion.
  echo "Librería del Sistema: $CONFDIR"
  echo "Archivos: "
  ls $CONFDIR
  echo	
  
  #Directorio Arribos.
  echo "Directorio de arribo de archivos externos: $ARRIDIR"
  echo

  #Directorio Rechazados.
  echo "Directorio de grabación de los archivos externos rechazados: $RECHDIR"
  echo

  #Directorio Bin.
  echo "Directorio de instalación de los ejecutables: $BINDIR"
  echo "Archivos: "
  ls $BINDIR
  echo

  #Directorio Maestro.
  echo "Directorio de instalación de los archivos maestros: $MAEDIR"
  echo "Archivos: "
  ls $MAEDIR
  echo

  #Directorio Log.
  echo "Directorio de grabación de los logs de auditoria: $LOGDIR"
  echo

  #Directorio Reportes.
  echo "Directorio de grabación de los reportes de salida: $REPODIR"
  echo

  echo "Otras variables seteadas:"
  echo
  echo "Directorio Grupo: $GRUPO"
  echo "Path archivo prod.mae: $prodmae"
  echo "Path archivo sucu.mae: $sucumae"
  echo "Path archivo cli.mae: $climae"
  echo "Path archivo detectarU: $detectarU"
  echo "Path archivo grabarparqueU: $grabarparqueU"
  echo "Path archivo listarU: $listarU"
  echo "Path archivo moverU: $moverU"
  echo "Path archivo loguearU: $loguearU"
  echo "Path archivo iniciarU: $iniciarU"
  echo
  echo "Estado del Sistema: INICIALIZADO"
}


########################################################
## Impresion Pantalla Estado Inicializacion Pendiente ##
########################################################

function imprimirEstadoPendiente() {

  #Encabezado.
  echo "TP SO7508 1mer cuatrimestre 2012. Tema U Copyright © Grupo 02"
  echo
  echo "Componentes Existentes:"
  echo

  #Validacion de existencia de directorios para imprimir.
  dir=`cat $CONFARCH | grep "GRUPO" | cut -f2 -d=`
  if [ -d "$dir" ]; then
    echo "Directorio de instalación del grupo: $dir"
    echo
  fi

  dir=`cat $CONFARCH | grep "ARRIDIR" | cut -f2 -d=`
  if [ -d "$dir" ]; then
    echo "Directorio de arribo de archivos externos: $dir"
    echo
  fi

  dir=`cat $CONFARCH | grep "RECHDIR" | cut -f2 -d=`
  if [ -d "$dir" ]; then
    echo "Directorio de grabación de los archivos externos rechazados: $dir"
    echo
  fi

  dir=`cat $CONFARCH | grep "BINDIR" | cut -f2 -d=`
  if [ -d "$dir" ]; then
    echo "Directorio de instalación de los ejecutables: $dir"
    echo "Archivos: "
    ls $dir
    echo
  fi

  dir=`cat $CONFARCH | grep "MAEDIR" | cut -f2 -d=`
  if [ -d "$dir" ]; then
    echo "Directorio de instalación de los archivos maestros: $dir"
    echo "Archivos: "
    ls $dir
    echo
  fi

  dir=`cat $CONFARCH | grep "LOGDIR" | cut -f2 -d=`
  if [ -d "$dir" ]; then
    echo "Directorio de grabación de los logs de auditoria: $dir"
    echo
  fi

  dir=`cat $CONFARCH | grep "REPODIR" | cut -f2 -d=`
  if [ -d "$dir" ]; then
    echo "Directorio de grabación de los reportes de salida: $dir"
    echo
  fi

  echo "Otras variables seteadas:"
  echo
  if [ -d "$GRUPO" ]; then
    echo "Directorio Grupo: $GRUPO"
  fi

  #Tomo el path del directorio maestro del archivo de configuracion.
  dir=`cat $CONFARCH | grep "MAEDIR" | cut -f2 -d=`
  if [ -f "$dir/prod.mae" ]; then
    echo "Path archivo prod.mae: $dir/prod.mae"
  fi
  if [ -f "$dir/sucu.mae" ]; then
    echo "Path archivo sucu.mae: $dir/sucu.mae"
  fi
  if [ -f "$dir/cli.mae" ]; then
    echo "Path archivo cli.mae: $dir/cli.mae"
  fi
  
  #Tomo el path del directorio binario del archivo de configuracion.
  dir=`cat $CONFARCH | grep "BINDIR" | cut -f2 -d=`
  if [ -f "$dir/DetectarU.sh" ]; then
    echo "Path archivo detectarU: $dir/DetectarU.sh"
  fi
  if [ -f "$dir/GrabarParqueU.sh" ]; then
    echo "Path archivo grabarparqueU: $dir/GrabarParqueU.sh"
  fi
  if [ -f "$dir/ListarU.pl" ]; then
    echo "Path archivo listarU: $dir/ListarU.pl"
  fi
  if [ -f "$dir/MoverU.sh" ]; then
    echo "Path archivo moverU: $dir/MoverU.sh"
  fi
  if [ -f "$dir/LoguearU.sh" ]; then
    echo "Path archivo loguearU: $dir/LoguearU.sh"
  fi
  if [ -f "$dir/IniciarU.sh" ]; then
    echo "Path archivo iniciarU: $dir/IniciarU.sh"
  fi
  
  #Impresion de archivos y directorios faltantes.
  echo
  echo "Componentes faltantes:"
  echo "Directorios:"
  mostrarDirectoriosFaltantes
  echo
  echo "Archivos Maestros:"
  mostrarArchivosMaestrosFaltantes
  echo
  echo "Archivos Comandos:"
  mostrarArchivosComandosFaltantes
  echo

  echo "Estado del Sistema: PENDIENTE de INSTALACION"
}


#################################################################################
## Impresion Pantalla Estado Inicializacion Correcto Con IniciarU ya ejecutado ##
#################################################################################

function imprimirEstadoInicializadoYaEjecutado() {
  
  #Encabezado.
  echo "TP SO7508 1mer cuatrimestre 2012. Tema U Copyright © Grupo 02"
  echo

  #Directorio Configuracion.
  echo "Librería del Sistema: $CONFDIR"
  echo "Archivos: "
  ls $CONFDIR
  echo	
  
  #Directorio Arribos.
  echo "Directorio de arribo de archivos externos: $ARRIDIR"
  echo

  #Directorio Rechazados.
  echo "Directorio de grabación de los archivos externos rechazados: $RECHDIR"
  echo

  #Directorio Bin.
  echo "Directorio de instalación de los ejecutables: $BINDIR"
  echo "Archivos: "
  ls $BINDIR
  echo

  #Directorio Maestro.
  echo "Directorio de instalación de los archivos maestros: $MAEDIR"
  echo "Archivos: "
  ls $MAEDIR
  echo

  #Directorio Log.
  echo "Directorio de grabación de los logs de auditoria: $LOGDIR"
  echo

  #Directorio Reportes.
  echo "Directorio de grabación de los reportes de salida: $REPODIR"
  echo
  
  echo "Otras variables seteadas:"
  echo
  echo "Directorio Grupo: $GRUPO"
  echo "Path archivo prod.mae: $prodmae"
  echo "Path archivo sucu.mae: $sucumae"
  echo "Path archivo cli.mae: $climae"
  echo "Path archivo detectarU: $detectarU"
  echo "Path archivo grabarparqueU: $grabarparqueU"
  echo "Path archivo listarU: $listarU"
  echo "Path archivo moverU: $moverU"
  echo "Path archivo loguearU: $loguearU"
  echo "Path archivo iniciarU: $iniciarU"
  

  echo "Estado del Sistema: INICIALIZADO"
  echo "No es posible efectuar una reinicialización en el sistema."
  echo "Proceso de Inicialización Cancelado."
}


#####################################################################
## Valido que existan los directorios del archivo de configuracion ##
#####################################################################

function validarDirectorios() {
	
  for dir in ${carpetas[*]}
  do
	  dir=`cat $CONFARCH | grep $dir | cut -f2 -d=`		
	  if [ ! -d "$dir" ]; then
		  ./LoguearU.sh -e 212
		  ERROR=1
		  break
	  fi
  done
}


#######################################################################
## Valido que existan los archivos maestros en el directorio maestro ##
#######################################################################

function validarArchivosMaestros() {
	
  for arch in ${archmae[*]}
  do
    if [ ! -f "$MAEDIR/$arch" ]; then
      ./LoguearU.sh -e 213
      ERROR=1
      break
    else if  test -w "$MAEDIR/$arch" ; then
	    ./LoguearU.sh -e 214
	    ERROR=1
	    break
	 fi
    fi	 	
  done
}


######################################################################
## Valido que existan los archivos de comandos en el directorio bin ##
######################################################################

function validarArchivosComandos() {
	
  for arch in ${archcom[*]}
  do
    if [ ! -f "$BINDIR/$arch" ]; then
      ./LoguearU.sh -e 215
      ERROR=1
      break
    else if ! test -x "$BINDIR/$arch" ; then
	    ./LoguearU.sh -e 216
	    ERROR=1
	    break
	    fi
    fi	
  done
}


############################################
## Seteo las variables de los directorios ##
############################################

function setVariablesDirectorios() {
	
  export GRUPO=`cat $CONFARCH | grep GRUPO | cut -f2 -d=`				
  export ARRIDIR=`cat $CONFARCH | grep ARRIDIR | cut -f2 -d=`	
  export RECHDIR=`cat $CONFARCH | grep RECHDIR | cut -f2 -d=`	
  export BINDIR=`cat $CONFARCH | grep BINDIR | cut -f2 -d=`	
  export MAEDIR=`cat $CONFARCH | grep MAEDIR | cut -f2 -d=`	
  export REPODIR=`cat $CONFARCH | grep REPODIR | cut -f2 -d=`	
  export LOGDIR=`cat $CONFARCH | grep LOGDIR | cut -f2 -d=`	
}


##################################################
## Seteo las variables de los archivos maestros ##
##################################################

function setVariablesArchivosMaestros() {

  export prodmae=$MAEDIR/prod.mae		
  export sucumae=$MAEDIR/sucu.mae
  export climae=$MAEDIR/cli.mae
}


####################################################
## Seteo las variables de los archivos de comando ##
####################################################

function setVariablesComandos() {

  export detectarU=$BINDIR/DetectarU.sh
  export grabarparqueU=$BINDIR/GrabarParqueU.sh
  export listarU=$BINDIR/ListarU.pl
  export moverU=$BINDIR/MoverU.sh
  export loguearU=$BINDIR/LoguearU.sh
  export iniciarU=$BINDIR/IniciarU.sh
}


############################################################################################
## Chequeo que las variables esten configuradas y asi evitar ejecutar IniciarU nuevamente ##
############################################################################################

function seEjecutoIniciarU() {

  seEjecutoIniciar=0
  
  if [ ! ${#carpetasComprobacion[@]} -eq 0 ]; then
    ./LoguearU.sh -i "carpetasComprobacion tiene ${#carpetasComprobacion[@]} elementos" -c IniciarU
    seEjecutoIniciar=$(($seEjecutoIniciar+1))
  fi

  if [ ! ${#archmaeComprobacion[@]} -eq 0 ]; then
    ./LoguearU.sh -i "archmaeComprobacion tiene ${#archmaeComprobacion[@]} elementos" -c IniciarU
    seEjecutoIniciar=$(($seEjecutoIniciar+1))
  fi 

  if [ ! ${#archcomComprobacion[@]} -eq 0 ]; then
    ./LoguearU.sh -i "archcomComprobacion tiene ${#archcomComprobacion[@]} elementos" -c IniciarU
    seEjecutoIniciar=$(($seEjecutoIniciar+1))
  fi 

  if [ ! ${#otrasvarComprobacion[@]} -eq 0 ]; then
    ./LoguearU.sh -i "otrasvarComprobacion tiene ${#otrasvarComprobacion[@]} elementos" -c IniciarU
    seEjecutoIniciar=$(($seEjecutoIniciar+1))
  fi 
  
  if [ $seEjecutoIniciar -eq 4 ]; then
    echo "1"
  else
    echo "0"
  fi
}


####################################################################
## Muestro los directorios faltantes del archivo de configuracion ##
####################################################################

function mostrarDirectoriosFaltantes() {
	
  for dir in ${carpetas[*]}
  do
	  dir=`cat $CONFARCH | grep $dir | cut -f2 -d=`		
	  if [ ! -d "$dir" ]; then
		  echo "$dir"
	  fi
  done
}


######################################################################
## Muestro los archivos maestros faltantes en el directorio maestro ##
######################################################################

function mostrarArchivosMaestrosFaltantes() {
	
  dir=`cat $CONFARCH | grep "MAEDIR" | cut -f2 -d=`	
  for arch in ${archmae[*]}
  do
    if [ ! -f "$dir/$arch" ]; then
      echo "$arch"
    fi	 	
  done
}


#####################################################################
## Muestro los archivos de comandos faltantes en el directorio bin ##
#####################################################################

function mostrarArchivosComandosFaltantes() {
  
  dir=`cat $CONFARCH | grep "BINDIR" | cut -f2 -d=`	
  for arch in ${archcom[*]}
  do
    if [ ! -f "$dir/$arch" ]; then
      echo "$arch"
    fi	
  done
}




#############################
## Inicio comando iniciarU ##
#############################


#Incio del logueo del comando.
./LoguearU.sh -i 200

#Verifico que ya no se haya ejecutado IniciarU en esta misma sesión de usuario.
#Si todas las variables estan seteadas devuelve 1 "seEjecutoIniciarU".
resultado=`seEjecutoIniciarU`

if [ $resultado -eq 1 ]; then
  ./LoguearU.sh -a 219
  imprimirEstadoInicializadoYaEjecutado
  return 0
fi

#Valido que exista el directorio de configuracion y su archivo correspondiente.
if [ ! -d "$CONFDIR" ]; then
  ./LoguearU.sh -se 201
  return 1
  else if [ ! -f "$CONFARCH" ]; then
      ./LoguearU.sh -se 202
      return 1
  fi
fi

#Seteo variables para archivo y directorio de configuracion.
if [ $ERROR = 0 ]; then
  ./LoguearU.sh -i 203
  export CONFDIR=$CONFDIR
  export CONFARCH=$CONFARCH
fi

#Si no hubo error, valido los directorios.
if [ $ERROR = 0 ]; then
  ./LoguearU.sh -i 207
  validarDirectorios
fi

#Seteo los directorios para que los usen los demas comandos de aca en adelante.
if [ $ERROR = 0 ]; then
  ./LoguearU.sh -i 204
  setVariablesDirectorios
fi

#Si no hubo error, valido los archivos maestros.
if [ $ERROR = 0 ]; then
  ./LoguearU.sh -i 208
  validarArchivosMaestros
fi

#Seteo los archivos maestros para que los usen los demas comandos de aca en adelante.
if [ $ERROR = 0 ]; then
  ./LoguearU.sh -i 205
  setVariablesArchivosMaestros
fi

#Si no hubo error, valido los archivos de comandos.
if [ $ERROR = 0 ]; then
  ./LoguearU.sh -i 209
  validarArchivosComandos
fi

#Seteo rutas de los comandos para que los usen los demas comandos de aca en adelante.
if [ $ERROR = 0 ]; then
  ./LoguearU.sh -i 206
  setVariablesComandos
fi

#Setear la variable PATH donde se ubican los comandos.
if [ $ERROR = 0 ]; then 
  ./LoguearU.sh -i 210
  export PATH=$PATH:$BINDIR
fi


##############################
## Impresiones por pantalla ##
##############################

#Impresion pantalla de estado finalizado.
if [ $ERROR = 0 ]; then 
  imprimirEstadoInicializado
fi

#Verificar si la instalación está completa.
if [ $ERROR = 1 ]; then 
  ./LoguearU.sh -a 211
  imprimirEstadoPendiente
  return 0
fi

#LLamada al detectarU si este comando no se encuentra corriendo.
if [ ! "$(pgrep DetectarU)" ]; then
  ./LoguearU.sh -i 217
  $detectarU &
  PROCESOS=`ps -ef | grep -i DetectarU.sh`
  DETECTARU_PID=`echo $PROCESOS | cut -d " " -f2`
  ./LoguearU.sh -i "Demonio corriendo bajo el Nro: $DETECTARU_PID" -c IniciarU
  echo "Demonio corriendo bajo el Nro: $DETECTARU_PID"
  ./LoguearU.sh -i 218
  echo "Proceso de Inicialización Concluido."
else
  ./LoguearU.sh -i 218
  echo "Proceso de Inicialización Concluido."
  ./LoguearU.sh -i "El demonio ya estaba corriendo" -c IniciarU
fi
